/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ecommercer.dao;

import br.com.ecommercer.bean.Perfil;
import br.com.ecommercer.bean.Pessoa;
import br.com.ecommercer.bean.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Aluno
 */
public class UsuarioDaoImp implements UsuarioDao {

    @Override
    public Object salvar(Object obj) throws Exception {
        Pessoa pessoa = (Pessoa) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        try {
            String SQL = "INSERT INTO usuario(login, senha, perfil_id, pessoa_id) "
                    + "VALUES(?,?,?,?)";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, pessoa.getUsuario().getLogin());
            ps.setString(2, pessoa.getUsuario().getSenha());
            ps.setInt(3, pessoa.getUsuario().getPerfil().getId());
            ps.setInt(4, pessoa.getId());
            ps.executeUpdate();


        } catch (SQLException se) {
            throw new Exception("Erro ao tentar inserir dados" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps, rs);
        }
        return pessoa;
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Pessoa pessoa = (Pessoa) obj;
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String SQL = "UPDATE usuario SET login=?, senha=?, idPerfil=? WHERE idPessoa=?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, pessoa.getUsuario().getLogin());
            ps.setString(2, pessoa.getUsuario().getSenha());
            ps.setInt(3, pessoa.getUsuario().getPerfil().getId());
            ps.setInt(4, pessoa.getId());
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar atualizar dados" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String SQL = "DELETE FROM pessoa WHERE id=?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            ps.executeUpdate();

        } catch (SQLException se) {
            throw new Exception("Erro ao tentar excluir dados"
                    + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    String SQL = "DELETE FROM pessoa WHERE id=?";

    @Override
    public List<Object> listar() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Usuario> procuraPorNome(String nome) throws SQLException, Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Usuario logar(String login, String senha, Boolean tipoAcesso) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Usuario usuario = new Usuario();
        Perfil perfil = new Perfil();
        try {
            conn = FabricaConexao.getConnection();
            String consulta = "SELECT * FROM usuario u JOIN perfil p ON u.perfil_id = p.id "
                    + "WHERE u.login = ? AND u.senha = ? AND p.tipoAdmin = ?";
            ps = conn.prepareStatement(consulta);
            ps.setString(1, login);
            ps.setString(2, senha);
            ps.setBoolean(3, tipoAcesso);
            rs = ps.executeQuery();
            if (rs.next()) {
                usuario.setLogado(true);
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
                perfil.setTipoAdmin(rs.getBoolean("acessoAdmin"));
                usuario.setPerfil(perfil);
            }

        } catch (Exception e) {
            System.out.println("Erro ao tentar logar " + e.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps, rs);
        }

        return usuario;
    }
}
